package com.huaxin.hxmodulesystem.models.enums;

import lombok.Getter;

/**
 * 业务类型枚举
 * 用于区分不同业务场景，如短信发送、审核流程、日志记录等
 */
@Getter
public enum BizType {

    // -----------------------------
    // 电工相关业务
    // -----------------------------
    ELECTRICIAN_AUDIT("ELECTRICIAN_AUDIT", "电工档案审核"),
    ELECTRICIAN_CERT_EXPIRE("ELECTRICIAN_CERT_EXPIRE", "电工证书到期提醒"),
    ELECTRICIAN_ON_DUTY("ELECTRICIAN_ON_DUTY", "电工上岗通知"),

    // -----------------------------
    // 组织/家庭关系相关
    // -----------------------------
    ORG_FAMILY_BIND("ORG_FAMILY_BIND", "组织家庭绑定"),
    ORG_FAMILY_UNBIND("ORG_FAMILY_UNBIND", "组织家庭解绑"),

    // -----------------------------
    // 短信通知相关
    // -----------------------------
    SMS_LOGIN_VERIFY("SMS_LOGIN_VERIFY", "登录验证码"),
    SMS_BIND_PHONE("SMS_BIND_PHONE", "手机绑定验证码"),
    SMS_PAYMENT_SUCCESS("SMS_PAYMENT_SUCCESS", "支付成功通知"),
    SMS_WORK_ORDER_ASSIGNED("SMS_WORK_ORDER_ASSIGNED", "工单分配通知"),

    // -----------------------------
    // 系统任务/定时任务
    // -----------------------------
    SYSTEM_DATA_SYNC("SYSTEM_DATA_SYNC", "系统数据同步任务"),
    SYSTEM_CLEANUP("SYSTEM_CLEANUP", "系统清理任务"),

    // -----------------------------
    // 安全与告警
    // -----------------------------
    SECURITY_LOGIN_ANOMALY("SECURITY_LOGIN_ANOMALY", "登录异常告警"),
    SECURITY_DATA_ACCESS("SECURITY_DATA_ACCESS", "敏感数据访问记录");

    /**
     * 业务类型编码（建议大写，英文+下划线）
     */
    private final String code;

    /**
     * 业务类型描述
     */
    private final String desc;

    BizType(String code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    /**
     * 根据 code 查找枚举（用于反序列化或数据库查询）
     */
    public static BizType of(String code) {
        if (code == null || code.isEmpty()) return null;
        for (BizType type : values()) {
            if (type.code.equalsIgnoreCase(code)) {
                return type;
            }
        }
        throw new IllegalArgumentException("Invalid BizType code: " + code);
    }
}